package cn.ljy.authority.model;

import cn.ljy.common.model.BaseModel;
import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.Range;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.Set;

//账户信息
@ApiModel(value="账户")
@Data
@EqualsAndHashCode(callSuper = false,of = {"id"})
@NoArgsConstructor
public class SysUser extends BaseModel {
    private Long id;
    @NotBlank(message = "账户名不能为空")
    @Length(min = 4, max = 20, message = "账户名的长度必须在 {min} - {max} 之间")
    private String username;//账户名
    @JsonIgnore
    private String password;//密码
    @Length(min = 2, max = 20, message = "姓名的长度必须在 {min} - {max} 之间")
    @NotBlank(message = "姓名不能为空")
    private String nickName;//昵称/网名，允许重名
    @NotNull(message = "性别不能为空")
    @Range(min = 0,max = 2,message = "性别的数值必须在{min} - {max}之间")
    private Integer sex;//性别
    private String headImgUrl;//头像地址
    @NotNull(message = "账户状态不能为空")
    @Range(min = 0,max = 2,message = "账户状态的数值必须在{min} - {max}之间")
    private Integer status;//账户状态
    private Boolean deleteStatus;//删除状态
    @NotNull(message = "必须选择所属部门")
    private SysDepartment department;//部门
    private Date createTime;//创建时间
    private Date updateTime;//最后编辑时间
    private String description;//账户描述

    //用于传递到前端的数据，偷懒不在编写dto
    private Set<SysRole> roles;//该账户拥有的角色集合

    //非数据库字段
    private Integer roleNumber;//角色数
    private Integer permissionNumber;//权限数

    //用于接收前端的数据
    private Integer[] roleIds;//用于接收前端传递过来的角色集合id。

    public SysUser(Long id) {
        this.id = id;
    }

    public interface SysUserStatus {//用户状态
        int DISABLED = 0;//不可用
        int VALID = 1;//可用
        int LOCKED = 2;//锁定
    }

    public interface UserSex {//用户性别
        int secrecy=0;// 保密
        int MAN = 1;//男
        int WOMAN = 2;//女
    }
}
